home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 11 / Cream of the Crop 11-1.iso / educate / astrw116.zip / SETUPAPI.INC < prev    next >
Text File  |  1994-02-22  |  50KB  |  1,643 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7.  
  8. CONST SM_CXSCREEN = 0
  9. CONST SM_CYSCREEN = 1
  10.  
  11. CONST WF_80x87    = 1024
  12. CONST WF_CPU186   =  128
  13. CONST WF_CPU286   =    2
  14. CONST WF_CPU386   =    4
  15. CONST WF_CPU486   =    8
  16. CONST WF_STANDARD =   16
  17. CONST WF_ENHANCED =   32
  18.  
  19.  
  20. '' DoMsgBox Flags
  21.  
  22. CONST MB_OK          = 0
  23. CONST MB_ICONHAND    = 16
  24. CONST MB_TASKMODAL   = 8192
  25.  
  26.  
  27. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  28. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  29. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  30. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  31. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  32. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  33. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  34.  
  35.  
  36.  
  37.  
  38. '**************************************************************************
  39. '****************************** Setup Constants ***************************
  40. '**************************************************************************
  41.  
  42.  
  43. ''Command Option Flags
  44.  
  45. CONST cmoVital       = 1
  46. CONST cmoCopy        = 2
  47. CONST cmoUndo        = 4
  48. CONST cmoRoot        = 8
  49. CONST cmoDecompress  = 16
  50. CONST cmoTimeStamp   = 32
  51. CONST cmoReadOnly    = 64
  52. CONST cmoBackup      = 128
  53. CONST cmoForce       = 256
  54. CONST cmoRemove      = 512
  55. CONST cmoOverwrite   = 1024
  56. CONST cmoAppend      = 2048
  57. CONST cmoPrepend     = 4096
  58. CONST cmoNone        = 0
  59. CONST cmoAll         = 65535
  60.  
  61.  
  62. ''File Exist Modes
  63.  
  64. CONST femExists     = 0
  65. CONST femRead       = 1
  66. CONST femWrite      = 2
  67. CONST femReadWrite  = 3
  68.  
  69.  
  70. ''Read-Only Return Code
  71.  
  72. CONST ynrcNo         = 0
  73. CONST ynrcYes        = 1
  74. CONST ynrcErr1       = 2
  75. CONST ynrcErr2       = 3
  76. CONST ynrcErr3       = 4
  77. CONST ynrcErr4       = 5
  78. CONST ynrcErr5       = 6
  79. CONST ynrcErr6       = 7
  80. CONST ynrcErr7       = 8
  81. CONST ynrcErr8       = 9
  82. CONST ynrcErr9       = 10
  83.  
  84.  
  85. ''General Return Codes
  86.  
  87. CONST grcOkay       = 0
  88. CONST grcNotOkay    = 1
  89. CONST grcUserQuit   = 48
  90.  
  91. CONST cbSymValMax = 512
  92.  
  93. ''ON ERROR Error Codes
  94. CONST STFERR      = 1024   ''setup system error
  95. CONST STFQUIT     = 1025   ''user quit
  96.  
  97. CONST scmOff      = 0
  98. CONST scmOnIgnore = 1
  99. CONST scmOnFatal  = 2
  100.  
  101.  
  102. '**************************************************************************
  103. '********************************  Setup API's  ***************************
  104. '**************************************************************************
  105.  
  106. '' common
  107.  
  108. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  109. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  110. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  111. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  112. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  113. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  114. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  115. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  116. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  117. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  118. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  119.  
  120.  
  121. ''shell
  122.  
  123. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  124. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  125. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  126. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  127. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  128. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  129. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  130. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  131. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  132. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  133. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  134. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  135. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  136.  
  137.  
  138. ''shell
  139.  
  140. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  141. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  142. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  143.  
  144.  
  145.  
  146. ''install
  147.  
  148. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  149. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  150. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  151. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  152. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  153. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  154. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  155. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  156. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  157. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  158. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  159. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  160. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  161. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  162. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  163. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  164. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  165. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  166. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  167. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  168. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  169. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  170. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  171. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  172. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  173. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  174. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  175. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  176. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  177. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  178. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  179.  
  180. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  181.  
  182.  
  183.  
  184. '*************************************************************************
  185. '****************  Setup Basic Wrapper Declarations  *********************
  186. '*************************************************************************
  187.  
  188.  
  189. ''shell
  190.  
  191. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  192. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  193. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  194. DECLARE SUB UIPop (n%)
  195. DECLARE SUB UIPopAll
  196. DECLARE SUB SetTitle (sz$)
  197. DECLARE SUB ReadInfFile (szFile$)
  198. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  199. DECLARE SUB RemoveSymbol (szSym$)
  200. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  201. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  202. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  203. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  204. DECLARE SUB AddListItem(szSymbol$, szItem$)
  205. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  206.  
  207. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  208. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  209.  
  210. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  211. DECLARE SUB RestoreCursor (hPrev%)
  212.  
  213. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  214. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  215.  
  216. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  217. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  218. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  219. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  220.  
  221. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  222. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  223. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  224. DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
  225.  
  226.  
  227. ''install
  228.  
  229.  
  230. DECLARE SUB CreateDir (szDir$, cmo%)
  231. DECLARE SUB RemoveDir (szDir$, cmo%)
  232. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  233. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  234. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  235. DECLARE SUB CopyFilesInCopyList
  236. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  237. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  238. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  239. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  240. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  241. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  242. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  243. DECLARE SUB ClearCopyList
  244. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  245. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  246. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  247. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  248. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  249. DECLARE SUB InitInstall
  250. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  251. DECLARE SUB CloseLogFile
  252. DECLARE SUB WriteToLogFile (szStr$)
  253. DECLARE SUB SetCopyGaugePosition (x%, y%)
  254. DECLARE SUB SetRestartDir(szDir$)
  255. DECLARE FUNCTION RestartListEmpty AS INTEGER
  256. DECLARE FUNCTION ExitExecRestart AS INTEGER
  257. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  258. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  259. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  260. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  261. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  262.  
  263.  
  264. '' Error Handling
  265.  
  266. '$ifdef DEBUG
  267.  
  268. '' Setup API Errors
  269. CONST saeFail   = 0
  270. CONST saeInit   = 1
  271. CONST saeNYI    = 3
  272. CONST saeArg    = 4    ''must be max sae value
  273.  
  274. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  275. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  276.  
  277. '' chk arg
  278. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  279. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  280. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  281. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  282.  
  283. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  284. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  285.  
  286. '$endif ''DEBUG
  287.  
  288.  
  289.  
  290. '' Windows system detect
  291.  
  292. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  293. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  294. DECLARE FUNCTION GetWindowsMode AS INTEGER
  295. DECLARE FUNCTION GetWindowsDir  AS STRING
  296. DECLARE FUNCTION GetWindowsSysDir AS STRING
  297. DECLARE FUNCTION IsWindowsShared AS INTEGER
  298. DECLARE FUNCTION GetScreenWidth AS INTEGER
  299. DECLARE FUNCTION GetScreenHeight AS INTEGER
  300.  
  301.  
  302. '*************************************************************************
  303. '*****************  Setup Basic Wrapper Definitions  *********************
  304. '*************************************************************************
  305. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  306.     fFrameInit = 0
  307.     fInstallInit = 0
  308.  
  309.     IF hSetup > 0 THEN
  310. '$ifdef DEBUG
  311.         StfApiErr saeInit, "InitSetup", szCmdLine$
  312. '$endif ''DEBUG
  313.     END IF
  314.  
  315.     i% = InitFrame(szCmdLine$)
  316.     fFrameInit = 1
  317.  
  318.     InitInstall
  319.     fInstallInit = 1
  320.  
  321.     InitSetup = i%
  322. END FUNCTION
  323.  
  324.  
  325.  
  326. '**************************************************************************
  327. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  328.     IF hSetup > 0 THEN
  329. '$ifdef DEBUG
  330.         StfApiErr saeInit, "InitFrame", szCmdLine$
  331. '$endif ''DEBUG
  332.     ELSE
  333.         i% = InitializeFrame(szCmdLine$)
  334.         IF i% = -1 THEN
  335.             END   '' NOT an error - Usage (/?) or Command line copy operation
  336.         ELSEIF i% = 0 THEN
  337. '$ifdef DEBUG
  338.             StfApiErr saeFail, "InitFrame", szCmdLine$
  339. '$endif ''DEBUG
  340.             END
  341.         ELSE
  342.             InitFrame = i%
  343.         END IF
  344.     END IF
  345. END FUNCTION
  346.  
  347.  
  348. '**************************************************************************
  349. SUB SetBitmap(szDll$, Bitmap%) STATIC
  350.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  351. '$ifdef DEBUG
  352.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  353. '$endif ''DEBUG
  354.         ERROR STFERR
  355.     END IF
  356. END SUB
  357.  
  358.  
  359. '**************************************************************************
  360. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  361.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  362. '$ifdef DEBUG
  363.         StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
  364. '$endif ''DEBUG
  365.         ERROR STFERR
  366.     END IF
  367. END SUB
  368.  
  369.  
  370. '*************************************************************************
  371. SUB SetTitle(sz$) STATIC
  372.     SetWindowText HwndFrame(), sz$
  373. END SUB
  374.  
  375.  
  376. '*************************************************************************
  377. SUB ReadInfFile (szFile$) STATIC
  378. '$ifdef DEBUG
  379.     if FValidFATPath(szFile$) = 0 then
  380.         BadArgErr 1, "ReadInfFile", szFile$
  381.     end if
  382.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  383.         StfApiErr saeFail, "ReadInfFile", szFile$
  384. '$else  ''!DEBUG
  385.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  386. '$endif ''!DEBUG
  387.         ERROR STFERR
  388.     END IF
  389. END SUB
  390.  
  391.  
  392. '*************************************************************************
  393. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  394. '$ifdef DEBUG
  395.     if szDll$ = "" then
  396.         n% = 1
  397.     elseif szDlgProc$ = "" then
  398.         n% = 3
  399.     else
  400.         n% = 0
  401.     end if
  402.     if n% > 0 then
  403.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  404.     end if
  405. '$endif ''DEBUG
  406.  
  407.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  408. '$ifdef DEBUG
  409.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  410. '$endif ''DEBUG
  411.         ERROR STFERR
  412.     ELSE
  413.         UIStartDlg = GetSymbolValue("DLGEVENT")
  414.     END IF
  415. END FUNCTION
  416.  
  417.  
  418. '*************************************************************************
  419. SUB UIPop (n%) STATIC
  420.     IF FKillNDialogs(n%) = 0 THEN
  421. '$ifdef DEBUG
  422.         StfApiErr saeFail, "UIPop", STR$(n%)
  423. '$endif ''DEBUG
  424.         ERROR STFERR
  425.     END IF
  426. END SUB
  427.  
  428.  
  429. '*************************************************************************
  430. SUB UIPopAll STATIC
  431.     IF FKillNDialogs(65535) = 0 THEN
  432. '$ifdef DEBUG
  433.         StfApiErr saeFail, "UIPopAll", ""
  434. '$endif ''DEBUG
  435.         ERROR STFERR
  436.     END IF
  437. END SUB
  438.  
  439.  
  440. '*************************************************************************
  441. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  442. '$ifdef DEBUG
  443.     if szSymbol$ = "" then
  444.         BadArgErr 1, "GetSymbolValue", szSymbol$
  445.     end if
  446. '$endif ''DEBUG
  447.     szValue$ = string$(cbSymValMax,32)
  448.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  449.     GetSymbolValue = szValue$
  450.     IF Length% >= cbSymValMax THEN
  451.     res% = DoMsgBox("Buffer Overflow1", "MS-Setup Error", MB_ICONHAND+MB_OK)
  452.         ERROR STFERR
  453.     END IF
  454.     IF szSymbol$ = "" THEN
  455.         ERROR STFERR
  456.     END IF
  457.     szValue$ = ""
  458. END FUNCTION
  459.  
  460.  
  461. '*************************************************************************
  462. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  463. '$ifdef DEBUG
  464.     if szSymbol$ = "" then
  465.         BadArgErr 1, "GetListLength", szSymbol$
  466.     end if
  467. '$endif ''DEBUG
  468.     GetListLength = UsGetListLength(szSymbol$)
  469.     IF szSymbol$ = "" THEN
  470.         ERROR STFERR
  471.     END IF
  472. END FUNCTION
  473.  
  474.  
  475. '*************************************************************************
  476. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  477. '$ifdef DEBUG
  478.     if szListSymbol$ = "" then
  479.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  480.     end if
  481.  
  482.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  483.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  484.     end if
  485. '$endif ''DEBUG
  486.  
  487.     szListItem$ = string$(cbSymValMax,32)
  488.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  489.     GetListItem = szListItem$
  490.     IF Length% >= cbSymValMax THEN
  491.     res% = DoMsgBox("Buffer Overflow2", "MS-Setup Error", MB_ICONHAND+MB_OK)
  492.         ERROR STFERR
  493.     END IF
  494.     IF szListSymbol$ = "" THEN
  495.         ERROR STFERR
  496.     END IF
  497.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  498.         ERROR STFERR
  499.     end if
  500.     szListItem$ = ""
  501. END FUNCTION
  502.  
  503.  
  504. '*************************************************************************
  505. SUB AddListItem(szSymbol$, szItem$) STATIC
  506. '$ifdef DEBUG
  507.     if szSymbol$ = "" then
  508.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  509.     end if
  510. '$endif ''DEBUG
  511.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  512. '$ifdef DEBUG
  513.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  514. '$endif ''DEBUG
  515.         ERROR STFERR
  516.     END IF
  517. END SUB
  518.  
  519.  
  520. '*************************************************************************
  521. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  522. '$ifdef DEBUG
  523.     if szSymbol$ = "" then
  524.         nArg% = 1
  525.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  526.         nArg% = 2
  527.     else
  528.         nArg% = 0
  529.     end if
  530.     if nArg% > 0 then
  531.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  532.     end if
  533. '$endif ''DEBUG
  534.  
  535.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  536. '$ifdef DEBUG
  537.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  538. '$endif ''DEBUG
  539.         ERROR STFERR
  540.     END IF
  541. END SUB
  542.  
  543.  
  544. '**************************************************************************
  545. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  546. '$ifdef DEBUG
  547.     if szSymbol$ = "" then
  548.         n% = 1
  549.     elseif FValidInfSect(szSect$) = 0 then
  550.         n% = 2
  551.     else
  552.         n% = 0
  553.     end if
  554.     if n% > 0 then
  555.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  556.     end if
  557. '$endif ''DEBUG
  558.  
  559.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  560. '$ifdef DEBUG
  561.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  562. '$endif ''DEBUG
  563.         ERROR STFERR
  564.     END IF
  565. END SUB
  566.  
  567.  
  568. '*************************************************************************
  569. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  570. '$ifdef DEBUG
  571.     if szSymbol$ = "" then
  572.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  573.     end if
  574. '$endif ''DEBUG
  575.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  576. '$ifdef DEBUG
  577.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  578. '$endif ''DEBUG
  579.         ERROR STFERR
  580.     END IF
  581. END SUB
  582.  
  583.  
  584. '*************************************************************************
  585. SUB RemoveSymbol(szSym$) STATIC
  586. '$ifdef DEBUG
  587.     if szSym$ = "" then
  588.         BadArgErr 1, "RemoveSymbol", szSym$
  589.     end if
  590. '$endif ''DEBUG
  591.     IF FRemoveSymbol(szSym$) = 0 THEN
  592. '$ifdef DEBUG
  593.         StfApiErr saeFail, "RemoveSymbol", szSym$
  594. '$endif ''DEBUG
  595.         ERROR STFERR
  596.     END IF
  597. END SUB
  598.  
  599.  
  600. '*************************************************************************
  601. FUNCTION ShowWaitCursor STATIC AS INTEGER
  602.     ShowWaitCursor = HShowWaitCursor
  603. END FUNCTION
  604.  
  605.  
  606. '*************************************************************************
  607. SUB RestoreCursor (hPrev%) STATIC
  608.     i% = FRestoreCursor(hPrev%)
  609.     IF i% = 0 THEN
  610. '$ifdef DEBUG
  611.         StfApiErr saeFail, "RestoreCursor", ""
  612. '$endif ''DEBUG
  613.         ERROR STFERR
  614.     END IF
  615. END SUB
  616.  
  617.  
  618. '*************************************************************************
  619. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  620.     SetBeepingMode = FSetBeepingMode(mode%)
  621. END FUNCTION
  622.  
  623.  
  624. '*************************************************************************
  625. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  626.     SetSilentMode = FSetSilent(mode%)
  627. END FUNCTION
  628.  
  629.  
  630. '*************************************************************************
  631. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  632. '$ifdef DEBUG
  633.     if FValidInfSect(szSect$) = 0 then
  634.         n% = 1
  635.     elseif szKey$ = "" then
  636.         n% = 2
  637.     else
  638.         n% = 0
  639.     end if
  640.     if n% > 0 then
  641.         BadArgErr n%, "GetSectionKeyDate", szSect$+", "+szKey$
  642.     end if
  643. '$endif ''DEBUG
  644.  
  645.     szBuf$ = string$(128, 32)
  646.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  647.     IF Length% >= 128 THEN
  648.     res% = DoMsgBox("Buffer Overflow3", "MS-Setup Error", MB_ICONHAND+MB_OK)
  649.         ERROR STFERR
  650.     END IF
  651.  
  652.     IF Length% = -1 THEN
  653. '$ifdef DEBUG
  654.         StfApiErr saeFail, "GetSectionKeyDate", szSect$+", "+szKey$
  655. '$endif ''DEBUG
  656.         ERROR STFERR
  657.     END IF
  658.  
  659.     GetSectionKeyDate = szBuf$
  660.     szBuf$ = ""
  661. END FUNCTION
  662.  
  663.  
  664. '*************************************************************************
  665. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  666. '$ifdef DEBUG
  667.     if FValidInfSect(szSect$) = 0 then
  668.         n% = 1
  669.     elseif szKey$ = "" then
  670.         n% = 2
  671.     else
  672.         n% = 0
  673.     end if
  674.     if n% > 0 then
  675.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  676.     end if
  677. '$endif ''DEBUG
  678.  
  679.     szBuf$ = string$(128, 32)
  680.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  681.     IF Length% >= 128 THEN
  682.     res% = DoMsgBox("Buffer Overflow4", "MS-Setup Error", MB_ICONHAND+MB_OK)
  683.         ERROR STFERR
  684.     END IF
  685.  
  686.     IF Length% = -1 THEN
  687. '$ifdef DEBUG
  688.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  689. '$endif ''DEBUG
  690.         ERROR STFERR
  691.     END IF
  692.  
  693.     GetSectionKeyFilename = szBuf$
  694.     szBuf$ = ""
  695. END FUNCTION
  696.  
  697.  
  698. '*************************************************************************
  699. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  700. '$ifdef DEBUG
  701.     if FValidInfSect(szSect$) = 0 then
  702.         n% = 1
  703.     elseif szKey$ = "" then
  704.         n% = 2
  705.     else
  706.         n% = 0
  707.     end if
  708.     if n% > 0 then
  709.         BadArgErr n%, "GetSectionKeySize", szSect$+", "+szKey$
  710.     end if
  711. '$endif ''DEBUG
  712.  
  713.     szBuf$ = string$(128, 32)
  714.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  715.     IF Length% >= 128 THEN
  716.     res% = DoMsgBox("Buffer Overflow5", "MS-Setup Error", MB_ICONHAND+MB_OK)
  717.         ERROR STFERR
  718.     END IF
  719.  
  720.     IF Length% = -1 THEN
  721. '$ifdef DEBUG
  722.         StfApiErr saeFail, "GetSectionKeySize", szSect$+", "+szKey$
  723. '$endif ''DEBUG
  724.         ERROR STFERR
  725.     END IF
  726.  
  727.     GetSectionKeySize = VAL(szBuf$)
  728.     szBuf$ = ""
  729. END FUNCTION
  730.  
  731.  
  732. '*************************************************************************
  733. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  734. '$ifdef DEBUG
  735.     if FValidInfSect(szSect$) = 0 then
  736.         n% = 1
  737.     elseif szKey$ = "" then
  738.         n% = 2
  739.     else
  740.         n% = 0
  741.     end if
  742.     if n% > 0 then
  743.         BadArgErr n%, "GetSectionKeyVersion", szSect$+", "+szKey$
  744.     end if
  745. '$endif ''DEBUG
  746.  
  747.     szBuf$ = string$(128, 32)
  748.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  749.     IF Length% >= 128 THEN
  750.     res% = DoMsgBox("Buffer Overflow6", "MS-Setup Error", MB_ICONHAND+MB_OK)
  751.         ERROR STFERR
  752.     END IF
  753.  
  754.     IF Length% = -1 THEN
  755. '$ifdef DEBUG
  756.         StfApiErr saeFail, "GetSectionKeyVersion", szSect$+", "+szKey$
  757. '$endif ''DEBUG
  758.         ERROR STFERR
  759.     END IF
  760.  
  761.     GetSectionKeyVersion = szBuf$
  762.     szBuf$ = ""
  763. END FUNCTION
  764.  
  765.  
  766. '*************************************************************************
  767. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  768. '$ifdef DEBUG
  769.     if szSym$ = "" then
  770.         n% = 1
  771.     elseif FValidInfSect(szSect$) = 0 then
  772.         n% = 2
  773.     else
  774.         n% = 0
  775.     end if
  776.     if n% > 0 then
  777.         BadArgErr n%, "MakeListFromSectionDate", szSym$+", "+szSect$
  778.     end if
  779. '$endif ''DEBUG
  780.  
  781.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  782. '$ifdef DEBUG
  783.         StfApiErr saeFail, "MakeListFromSectionDate", szSym$+", "+szSect$
  784. '$endif ''DEBUG
  785.         ERROR STFERR
  786.     END IF
  787. END SUB
  788.  
  789.  
  790. '*************************************************************************
  791. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  792. '$ifdef DEBUG
  793.     if szSym$ = "" then
  794.         n% = 1
  795.     elseif FValidInfSect(szSect$) = 0 then
  796.         n% = 2
  797.     else
  798.         n% = 0
  799.     end if
  800.     if n% > 0 then
  801.         BadArgErr n%, "MakeListFromSectionFilename", szSym$+", "+szSect$
  802.     end if
  803. '$endif ''DEBUG
  804.  
  805.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  806. '$ifdef DEBUG
  807.         StfApiErr saeFail, "MakeListFromSectionFilename", szSym$+", "+szSect$
  808. '$endif ''DEBUG
  809.         ERROR STFERR
  810.     END IF
  811. END SUB
  812.  
  813.  
  814. '*************************************************************************
  815. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  816. '$ifdef DEBUG
  817.     if szSym$ = "" then
  818.         n% = 1
  819.     elseif FValidInfSect(szSect$) = 0 then
  820.         n% = 2
  821.     else
  822.         n% = 0
  823.     end if
  824.     if n% > 0 then
  825.         BadArgErr n%, "MakeListFromSectionSize", szSym$+", "+szSect$
  826.     end if
  827. '$endif ''DEBUG
  828.  
  829.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  830. '$ifdef DEBUG
  831.         StfApiErr saeFail, "MakeListFromSectionSize", szSym$+", "+szSect$
  832. '$endif ''DEBUG
  833.         ERROR STFERR
  834.     END IF
  835. END SUB
  836.  
  837.  
  838. '*************************************************************************
  839. SUB MakeListFromSectionVersion (szSym$, szSect$) STATIC
  840. '$ifdef DEBUG
  841.     if szSym$ = "" then
  842.         n% = 1
  843.     elseif FValidInfSect(szSect$) = 0 then
  844.         n% = 2
  845.     else
  846.         n% = 0
  847.     end if
  848.     if n% > 0 then
  849.         BadArgErr n%, "MakeListFromSectionVersion", szSym$+", "+szSect$
  850.     end if
  851. '$endif ''DEBUG
  852.  
  853.     IF FMakeListInfSectionField(szSym$, szSect$, 19) = 0 THEN
  854. '$ifdef DEBUG
  855.         StfApiErr saeFail, "MakeListFromSectionVersion", szSym$+", "+szSect$
  856. '$endif ''DEBUG
  857.         ERROR STFERR
  858.     END IF
  859. END SUB
  860.  
  861.  
  862. '*************************************************************************
  863. SUB InitInstall STATIC
  864.     IF hSetup > 0 THEN
  865. '$ifdef DEBUG
  866.         StfApiErr saeInit, "InitInstall", ""
  867. '$endif ''DEBUG
  868.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  869. '$ifdef DEBUG
  870.         StfApiErr saeFail, "InitInstall", ""
  871. '$endif ''DEBUG
  872.         END
  873.     END IF
  874. END SUB
  875.  
  876.  
  877. '*************************************************************************
  878. SUB CreateDir (szDir$, cmo%) STATIC
  879. '$ifdef DEBUG
  880.     if FValidFATDir(szDir$) = 0 then
  881.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  882.     end if
  883. '$endif ''DEBUG
  884.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  885. '$ifdef DEBUG
  886.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  887. '$endif ''DEBUG
  888.         ERROR STFERR
  889.     END IF
  890. END SUB
  891.  
  892.  
  893. '*************************************************************************
  894. SUB RemoveDir (szDir$, cmo%) STATIC
  895. '$ifdef DEBUG
  896.     if FValidFATDir(szDir$) = 0 then
  897.         BadArgErr 1, "RemoveDir", szDir$+", "+STR$(cmo%)
  898.     end if
  899. '$endif ''DEBUG
  900.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  901. '$ifdef DEBUG
  902.         StfApiErr saeFail, "RemoveDir", szDir$+", "+STR$(cmo%)
  903. '$endif ''DEBUG
  904.         ERROR STFERR
  905.     END IF
  906. END SUB
  907.  
  908.  
  909.  
  910. '*************************************************************************
  911. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  912. '$ifdef DEBUG
  913.     if FValidIniFile(szFile$) = 0 then
  914.         n% = 1
  915.     elseif FValidInfSect(szSect$) = 0 then
  916.         n% = 2
  917.     else
  918.         n% = 0
  919.     end if
  920.     if n% > 0 then
  921.         BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  922.     end if
  923. '$endif ''DEBUG
  924.  
  925.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  926. '$ifdef DEBUG
  927.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  928. '$endif ''DEBUG
  929.         ERROR STFERR
  930.     END IF
  931. END SUB
  932.  
  933.  
  934. '*************************************************************************
  935. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  936. '$ifdef DEBUG
  937.     if FValidIniFile(szFile$) = 0 then
  938.         n% = 1
  939.     elseif FValidInfSect(szSect$) = 0 then
  940.         n% = 2
  941.     else
  942.         n% = 0
  943.     end if
  944.     if n% > 0 then
  945.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  946.     end if
  947. '$endif ''DEBUG
  948.  
  949.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  950. '$ifdef DEBUG
  951.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  952. '$endif ''DEBUG
  953.         ERROR STFERR
  954.     END IF
  955. END SUB
  956.  
  957.  
  958. '*************************************************************************
  959. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  960. '$ifdef DEBUG
  961.     if FValidIniFile(szFile$) = 0 then
  962.         n% = 1
  963.     elseif FValidInfSect(szSect$) = 0 then
  964.         n% = 2
  965.     elseif szKey$ = "" then
  966.         n% = 3
  967.     else
  968.         n% = 0
  969.     end if
  970.     if n% > 0 then
  971.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  972.     end if
  973. '$endif ''DEBUG
  974.  
  975.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  976. '$ifdef DEBUG
  977.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  978. '$endif ''DEBUG
  979.         ERROR STFERR
  980.     END IF
  981. END SUB
  982.  
  983.  
  984. '*************************************************************************
  985. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  986. '$ifdef DEBUG
  987.     if FValidFATPath(szFile$) = 0 then
  988.         n% = 1
  989.     elseif FValidInfSect(szSect$) = 0 then
  990.         n% = 2
  991.     elseif szKey$ = "" then
  992.         n% = 3
  993.     else
  994.         n% = 0
  995.     end if
  996.     if n% > 0 then
  997.         BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  998.     end if
  999. '$endif ''DEBUG
  1000.  
  1001.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  1002. '$ifdef DEBUG
  1003.         StfApiErr saeFail, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1004. '$endif ''DEBUG
  1005.         ERROR STFERR
  1006.     END IF
  1007. END SUB
  1008.  
  1009.  
  1010. '*************************************************************************
  1011. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  1012. '$ifdef DEBUG
  1013.     if szGroup$ = "" or len(szGroup$) > 24 then
  1014.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1015.     end if
  1016. '$endif ''DEBUG
  1017.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  1018. '$ifdef DEBUG
  1019.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  1020. '$endif ''DEBUG
  1021.         ERROR STFERR
  1022.     END IF
  1023. END SUB
  1024.  
  1025.  
  1026. '*************************************************************************
  1027. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  1028. '$ifdef DEBUG
  1029.     if szGroup$ = "" or len(szGroup$) > 24 then
  1030.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1031.     end if
  1032. '$endif ''DEBUG
  1033.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  1034. '$ifdef DEBUG
  1035.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1036. '$endif ''DEBUG
  1037.         ERROR STFERR
  1038.     END IF
  1039. END SUB
  1040.  
  1041.  
  1042.  
  1043. '*************************************************************************
  1044. SUB ClearCopyList STATIC
  1045.     ResetCopyList
  1046. END SUB
  1047.  
  1048.  
  1049. '*************************************************************************
  1050. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  1051.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  1052.     IF lNeed& < 0 THEN
  1053. '$ifdef DEBUG
  1054.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  1055. '$endif ''DEBUG
  1056.         ERROR STFERR
  1057.     END IF
  1058.     GetCopyListCost = lNeed&
  1059. END FUNCTION
  1060.  
  1061.  
  1062. '*************************************************************************
  1063. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  1064.     szItemNew$ = szItem$
  1065.     IF szOther$ <> "" THEN
  1066.         szItemNew$ = szItem$ + "," + szOther$
  1067.     END IF
  1068. '$ifdef DEBUG
  1069.     if szGroup$ = "" or len(szGroup$) > 24 then
  1070.         BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1071.     end if
  1072. '$endif ''DEBUG
  1073.  
  1074.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  1075. '$ifdef DEBUG
  1076.         StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  1077. '$endif ''DEBUG
  1078.         ERROR STFERR
  1079.     END IF
  1080.     szItemNew$ = ""
  1081. END SUB
  1082.  
  1083.  
  1084.  
  1085.  
  1086. '*************************************************************************
  1087. SUB CopyFilesInCopyList STATIC
  1088.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  1089.  
  1090.     IF grc% = grcUserQuit THEN
  1091.         ERROR STFQUIT
  1092.     ELSEIF grc% > 0 THEN
  1093. '$ifdef DEBUG
  1094.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  1095. '$endif ''DEBUG
  1096.         ERROR STFERR
  1097.     END IF
  1098. END SUB
  1099.  
  1100.  
  1101. '*************************************************************************
  1102. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  1103. '$ifdef DEBUG
  1104.     if FValidFATPath(szFullPathSrc$) = 0 then
  1105.         n% = 1
  1106.     elseif FValidFATPath(szFullPathDst$) = 0 then
  1107.         n% = 2
  1108.     else
  1109.         n% = 0
  1110.     end if
  1111.     if n% > 0 then
  1112.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1113.     end if
  1114. '$endif ''DEBUG
  1115.  
  1116.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  1117. '$ifdef DEBUG
  1118.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1119. '$endif ''DEBUG
  1120.         ERROR STFERR
  1121.     END IF
  1122. END SUB
  1123.  
  1124.  
  1125.  
  1126. '*************************************************************************
  1127. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  1128. '$ifdef DEBUG
  1129.     if FValidFATPath(szFullPathSrc$) = 0 then
  1130.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1131.     end if
  1132. '$endif ''DEBUG
  1133.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  1134. '$ifdef DEBUG
  1135.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1136. '$endif ''DEBUG
  1137.         ERROR STFERR
  1138.     END IF
  1139. END SUB
  1140.  
  1141.  
  1142. '*************************************************************************
  1143. SUB BackupFile (szFullPath$, szBackup$) STATIC
  1144. '$ifdef DEBUG
  1145.     if FValidFATPath(szFullPath$) = 0 then
  1146.         n% = 1
  1147.     elseif szBackup$ = "" then
  1148.         n% = 2
  1149.     else
  1150.         n% = 0
  1151.     end if
  1152.     if n% > 0 then
  1153.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  1154.     end if
  1155. '$endif ''DEBUG
  1156.  
  1157.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1158. '$ifdef DEBUG
  1159.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  1160. '$endif ''DEBUG
  1161.         ERROR STFERR
  1162.     END IF
  1163. END SUB
  1164.  
  1165.  
  1166. '*************************************************************************
  1167. SUB RenameFile (szFullPath$, szBackup$) STATIC
  1168. '$ifdef DEBUG
  1169.     if FValidFATPath(szFullPath$) = 0 then
  1170.         n% = 1
  1171.     elseif szBackup$ = "" then
  1172.         n% = 2
  1173.     else
  1174.         n% = 0
  1175.     end if
  1176.     if n% > 0 then
  1177.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  1178.     end if
  1179. '$endif ''DEBUG
  1180.  
  1181.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1182. '$ifdef DEBUG
  1183.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  1184. '$endif ''DEBUG
  1185.         ERROR STFERR
  1186.     END IF
  1187. END SUB
  1188.  
  1189.  
  1190. '*************************************************************************
  1191. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  1192. '$ifdef DEBUG
  1193.     if FValidInfSect(szSect$) = 0 then
  1194.         n% = 1
  1195.     elseif FValidFATDir(szSrc$) = 0 then
  1196.         n% = 2
  1197.     elseif FValidFATDir(szDest$) = 0 then
  1198.         n% = 3
  1199.     else
  1200.         n% = 0
  1201.     end if
  1202.     if n% > 0 then
  1203.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1204.     end if
  1205. '$endif ''DEBUG
  1206.  
  1207.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  1208. '$ifdef DEBUG
  1209.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1210. '$endif ''DEBUG
  1211.         ERROR STFERR
  1212.     END IF
  1213. END SUB
  1214.  
  1215.  
  1216. '*************************************************************************
  1217. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1218. '$ifdef DEBUG
  1219.     if FValidInfSect(szSect$) = 0 then
  1220.         n% = 1
  1221.     elseif szKey$ = "" then
  1222.         n% = 2
  1223.     elseif FValidFATDir(szSrc$) = 0 then
  1224.         n% = 3
  1225.     elseif FValidFATDir(szDest$) = 0 then
  1226.         n% = 4
  1227.     else
  1228.         n% = 0
  1229.     end if
  1230.     if n% > 0 then
  1231.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1232.     end if
  1233. '$endif ''DEBUG
  1234.  
  1235.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1236. '$ifdef DEBUG
  1237.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1238. '$endif ''DEBUG
  1239.         ERROR STFERR
  1240.     END IF
  1241. END SUB
  1242.  
  1243.  
  1244. '*************************************************************************
  1245. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1246. '$ifdef DEBUG
  1247.     if FValidInfSect(szSect$) = 0 then
  1248.         n% = 1
  1249.     elseif szKey$ = "" then
  1250.         n% = 2
  1251.     elseif FValidFATDir(szSrc$) = 0 then
  1252.         n% = 3
  1253.     elseif FValidFATPath(szDest$) = 0 then
  1254.         n% = 4
  1255.     else
  1256.         n% = 0
  1257.     end if
  1258.     if n% > 0 then
  1259.         BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1260.     end if
  1261. '$endif ''DEBUG
  1262.  
  1263.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1264. '$ifdef DEBUG
  1265.         StfApiErr saeFail, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1266. '$endif ''DEBUG
  1267.         ERROR STFERR
  1268.     END IF
  1269. END SUB
  1270.  
  1271.  
  1272.  
  1273. '*************************************************************************
  1274. SUB OpenLogFile (szFile$, fAppend%) STATIC
  1275. '$ifdef DEBUG
  1276.     if FValidFATPath(szFile$) = 0 then
  1277.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1278.     end if
  1279. '$endif ''DEBUG
  1280.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  1281. '$ifdef DEBUG
  1282.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1283. '$endif ''DEBUG
  1284.         ERROR STFERR
  1285.     END IF
  1286. END SUB
  1287.  
  1288.  
  1289. '*************************************************************************
  1290. SUB CloseLogFile STATIC
  1291.     IF FCloseLogFile() = 0 THEN
  1292. '$ifdef DEBUG
  1293.         StfApiErr saeFail, "CloseLogFile", ""
  1294. '$endif ''DEBUG
  1295.         ERROR STFERR
  1296.     END IF
  1297. END SUB
  1298.  
  1299.  
  1300. '*************************************************************************
  1301. SUB WriteToLogFile (szStr$) STATIC
  1302.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  1303. '$ifdef DEBUG
  1304.         StfApiErr saeFail, "WriteToLogFile", szStr$
  1305. '$endif ''DEBUG
  1306.         ERROR STFERR
  1307.     END IF
  1308. END SUB
  1309.  
  1310.  
  1311. ''' -1 in either parameter will mean 'center in frame client area'
  1312. '*************************************************************************
  1313. SUB SetCopyGaugePosition (x%, y%) STATIC
  1314.     ProSetPos x%, y%
  1315. END SUB
  1316.  
  1317.  
  1318. '*************************************************************************
  1319. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  1320.     IsDirWritable = FIsDirWritable(szDir$)
  1321. END FUNCTION
  1322.  
  1323.  
  1324. '*************************************************************************
  1325. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  1326. '$ifdef DEBUG
  1327.     if FValidFATDir(szFile$) = 0 then
  1328.         BadArgErr 1, "IsFileWritable", szFile$
  1329.     end if
  1330. '$endif ''DEBUG
  1331.     IsFileWritable = FIsFileWritable(szFile$)
  1332. END FUNCTION
  1333.  
  1334.  
  1335. '*************************************************************************
  1336. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  1337.     IF iField% < 1 THEN
  1338. '$ifdef DEBUG
  1339.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  1340. '$endif ''DEBUG
  1341.         ERROR STFERR
  1342.     END IF
  1343.     szStart$ = szLine$
  1344.     IF iField% <> 1 THEN
  1345.         FOR i% = 2 TO iField% STEP 1
  1346.             iNew% = INSTR(szStart$, ",")
  1347.             IF iNew% = 0 THEN
  1348.                 GetNthFieldFromIniString = ""
  1349.                 GOTO _GNFFIS_END
  1350.             END IF
  1351.             szStart$ = MID$(szStart$, (iNew% + 1))
  1352.         NEXT
  1353.     END IF
  1354.  
  1355.     iNew% = INSTR(szStart$, ",")
  1356.     IF iNew% <> 0 THEN
  1357.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  1358.     END IF
  1359.  
  1360.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  1361.  
  1362. _GNFFIS_END:
  1363.  
  1364. END FUNCTION
  1365.  
  1366.  
  1367. '*************************************************************************
  1368. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1369.     GetWindowsMajorVersion = GetVersion() MOD 256
  1370. END FUNCTION
  1371.  
  1372.  
  1373. '*************************************************************************
  1374. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1375.     GetWindowsMinorVersion = GetVersion() / 256
  1376. END FUNCTION
  1377.  
  1378.  
  1379. '*************************************************************************
  1380. FUNCTION GetWindowsMode STATIC AS INTEGER
  1381.     GetWindowsMode = 0
  1382.     longTmp& = GetWinFlags()
  1383.     IF longTmp& AND WF_STANDARD THEN
  1384.         GetWindowsMode = 1
  1385.     ELSEIF longTmp& AND WF_ENHANCED THEN
  1386.         GetWindowsMode = 2
  1387.     END IF
  1388. END FUNCTION
  1389.  
  1390.  
  1391. '*************************************************************************
  1392. FUNCTION GetWindowsDir STATIC AS STRING
  1393.     szBuf$ = string$(256, 32)
  1394.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1395.  
  1396.     IF cbBuf% = 0 THEN
  1397.         GetWindowsDir = ""
  1398. '$ifdef DEBUG
  1399.         StfApiErr saeFail, "GetWindowsDir", ""
  1400. '$endif ''DEBUG
  1401.         ERROR STFERR
  1402.     ELSE
  1403.         IF cbBuf% > 255 THEN
  1404.         res% = DoMsgBox("Buffer Overflow7", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1405.             ERROR STFERR
  1406.         END IF
  1407.         szBuf$ = RTRIM$(szBuf$)
  1408.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1409.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1410.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1411.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1412.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1413.         END IF
  1414.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1415.             szBuf$ = szBuf$ + "\"
  1416.         END IF
  1417.         GetWindowsDir = szBuf$
  1418.     END IF
  1419.  
  1420.     szBuf$ = ""
  1421. END FUNCTION
  1422.  
  1423.  
  1424. '*************************************************************************
  1425. FUNCTION GetWindowsSysDir STATIC AS STRING
  1426.     szBuf$ = string$(256, 32)
  1427.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1428.  
  1429.     IF cbBuf% = 0 THEN
  1430. '$ifdef DEBUG
  1431.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1432. '$endif ''DEBUG
  1433.         ERROR STFERR
  1434.     ELSE
  1435.         IF cbBuf% > 255 THEN
  1436.         res% = DoMsgBox("Buffer Overflow8", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1437.             ERROR STFERR
  1438.         END IF
  1439.         szBuf$ = RTRIM$(szBuf$)
  1440.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1441.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1442.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1443.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1444.         END IF
  1445.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1446.             szBuf$ = szBuf$ + "\"
  1447.         END IF
  1448.         GetWindowsSysDir = szBuf$
  1449.     END IF
  1450.  
  1451.     szBuf$ = ""
  1452. END FUNCTION
  1453.  
  1454.  
  1455. '*************************************************************************
  1456. FUNCTION IsWindowsShared STATIC AS INTEGER
  1457.     szWin$ = UCASE$(GetWindowsDir())
  1458.     szSys$ = UCASE$(GetWindowsSysDir())
  1459.  
  1460.     IF len(szWin$) = 0 THEN
  1461. '$ifdef DEBUG
  1462.         StfApiErr saeFail, "IsWindowsShared", ""
  1463. '$endif ''DEBUG
  1464.         ERROR STFERR
  1465.     END IF
  1466.  
  1467.     IF len(szSys$) <= len(szWin$) THEN
  1468.         IsWindowsShared = 1
  1469.     ELSE
  1470.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1471.         IF szWin$ = szSys$ THEN
  1472.             IsWindowsShared = 0
  1473.         ELSE
  1474.             IsWindowsShared = 1
  1475.         END IF
  1476.     END IF
  1477. END FUNCTION
  1478.  
  1479.  
  1480. '*************************************************************************
  1481. FUNCTION GetScreenWidth STATIC AS INTEGER
  1482.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1483. END FUNCTION
  1484.  
  1485.  
  1486. '*************************************************************************
  1487. FUNCTION GetScreenHeight STATIC AS INTEGER
  1488.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1489. END FUNCTION
  1490.  
  1491.  
  1492. '*************************************************************************
  1493. SUB SetRestartDir (szDir$) STATIC
  1494. '$ifdef DEBUG
  1495.     if FValidFATDir(szDir$) = 0 then
  1496.         BadArgErr 1, "SetRestartDir", szDir$
  1497.     end if
  1498. '$endif ''DEBUG
  1499.     IF FSetRestartDir(szDir$) = 0 THEN
  1500. '$ifdef DEBUG
  1501.         StfApiErr saeFail, "SetRestartDir", szDir$
  1502. '$endif ''DEBUG
  1503.         ERROR STFERR
  1504.     END IF
  1505. END SUB
  1506.  
  1507.  
  1508. '*************************************************************************
  1509. FUNCTION RestartListEmpty STATIC AS INTEGER
  1510.     IF FRestartListEmpty() = 0 THEN
  1511.         RestartListEmpty = 0
  1512.     ELSE
  1513.         RestartListEmpty = 1
  1514.     END IF
  1515. END FUNCTION
  1516.  
  1517.  
  1518. '*************************************************************************
  1519. FUNCTION ExitExecRestart STATIC AS INTEGER
  1520.     ExitExecRestart = FExitExecRestart
  1521. END FUNCTION
  1522.  
  1523.  
  1524. '*************************************************************************
  1525. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1526.  
  1527. '$ifdef DEBUG
  1528.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1529.         n% = 1
  1530.     elseif FValidFATPath(szDst$) = 0 then
  1531.         n% = 2
  1532.     elseif FValidFATDir(szDir$) = 0 then
  1533.         n% = 3
  1534.     else
  1535.         n% = 0
  1536.     end if
  1537.     if n% > 0 then
  1538.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1539.     end if
  1540. '$endif ''DEBUG
  1541.  
  1542.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1543. '$ifdef DEBUG
  1544.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1545. '$endif ''DEBUG
  1546.         ERROR STFERR
  1547.     END IF
  1548. END SUB
  1549.  
  1550.  
  1551.  
  1552. '**************************************************************************
  1553. '***************************  Error Handlers  *****************************
  1554. '**************************************************************************
  1555.  
  1556.  
  1557. '$ifdef DEBUG
  1558. '**************************************************************************
  1559. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1560.     select case nMsg%
  1561.         case saeFail
  1562.             lpText$ = "Failed"
  1563.         case saeInit
  1564.             lpText$ = "Already Initialized"
  1565.         case saeNYI
  1566.             lpText$ = "NYI"
  1567.         case else
  1568.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1569.     end select
  1570.  
  1571.     lpText$ = lpText$ + ": "+ szApi$
  1572.     if szArgs$ <> "" then
  1573.         lpText$ = lpText + " (" + szArgs$ + ")"
  1574.     end if
  1575.     lpCaption$ = "MS-Setup Toolkit API Error"
  1576.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1577.     print lpText$
  1578.     lpText$ = ""
  1579.     lpCaption$ = ""
  1580. END SUB
  1581.  
  1582. '**************************************************************************
  1583. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1584.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1585.     ERROR STFERR
  1586. END SUB
  1587.  
  1588.  
  1589. '** REVIEW: Move this function into common lib (we'll need it there too)
  1590. '**************************************************************************
  1591. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1592.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1593.         FValidInfSect = 0
  1594.     else
  1595.         FValidInfSect = 1
  1596.     end if
  1597. END FUNCTION
  1598.  
  1599.  
  1600. '** REVIEW: Move this function into common lib (we'll need it there too)
  1601. '**************************************************************************
  1602. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1603.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  1604.         FValidIniFile = 0
  1605.     else
  1606.         FValidIniFile = 1
  1607.     end if
  1608. END FUNCTION
  1609.  
  1610. '**************************************************************************
  1611. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1612.  
  1613.     if szDrive$ = "" then
  1614.         FValidDrive = 0
  1615.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  1616.         FValidDrive = 1
  1617.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1618.         FValidDrive = 0
  1619.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1620.         FValidDrive = 0
  1621.     elseif LEN(szDrive$) = 1 then
  1622.         FValidDrive = 1
  1623.     elseif INSTR(2,szDrive$,":\") = 2 then
  1624.         FValidDrive = 1
  1625.     elseif INSTR(1,szDrive$,":") = 2 then
  1626.         FValidDrive = 1
  1627.     else
  1628.         FValidDrive = 0
  1629.     end if
  1630. END FUNCTION
  1631.  
  1632. '$endif ''DEBUG
  1633.  
  1634.  
  1635. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1636.  
  1637. End Trap
  1638.  
  1639. hSetup = InitSetup(COMMAND$)
  1640.  
  1641. ON ERROR GOTO QUIT
  1642.  
  1643.